Token-based Authentication একটি আধুনিক নিরাপত্তা প্রক্রিয়া যা ব্যবহারকারীকে সার্ভারের সাথে নিরাপদভাবে যোগাযোগ করতে অনুমতি দেয়। JSON Web Token (JWT) হল একটি ওপেন স্ট্যান্ডার্ড যা দুটি পক্ষের মধ্যে নিরাপদ তথ্য বিনিময়ের জন্য ব্যবহৃত হয়। ASP.Net Core অ্যাপ্লিকেশনে JWT ব্যবহার করা হয় ব্যবহারকারীকে অথেন্টিকেট করার জন্য। এই পদ্ধতিতে, সার্ভার একটি টোকেন প্রদান করে, যা পরবর্তীতে ক্লায়েন্ট দ্বারা সাবমিট করা হয় এবং সার্ভার এই টোকেনের মাধ্যমে ব্যবহারকারীকে অথেন্টিকেট করে।
JWT একটি কমপ্যাক্ট এবং স্বনির্ভর স্ট্যান্ডার্ড যা তিনটি অংশে বিভক্ত:
Header.Payload.Signature
JWT Authentication ব্যবহার করতে Microsoft.AspNetCore.Authentication.JwtBearer প্যাকেজটি ইনস্টল করতে হবে।
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
ASP.Net Core অ্যাপ্লিকেশনে JWT Authentication কনফিগার করতে আপনাকে Startup.cs ফাইলে কিছু সেটিংস করতে হবে।
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// JWT Authentication কনফিগারেশন
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false; // HTTPS বাধ্যতামূলক নয়
options.SaveToken = true; // টোকেন সেভ করা হবে
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "your-issuer",
ValidAudience = "your-audience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your-secret-key"))
};
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
// JWT Authentication Middleware ব্যবহার
app.UseAuthentication();
// Authorization Middleware ব্যবহার
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
এখানে:
অথেন্টিকেশন সফল হলে, আপনাকে JWT টোকেন তৈরি করতে হবে এবং তা ক্লায়েন্টকে পাঠাতে হবে। এটি করার জন্য একটি অ্যাকশন তৈরি করা হয় যা ক্রেডেনশিয়াল যাচাইয়ের পর একটি টোকেন রিটার্ন করবে।
public class AuthController : ControllerBase
{
private readonly IConfiguration _configuration;
public AuthController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel login)
{
if (login.Username == "admin" && login.Password == "password")
{
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, login.Username),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:SecretKey"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: _configuration["Jwt:Issuer"],
audience: _configuration["Jwt:Audience"],
claims: claims,
expires: DateTime.Now.AddHours(1),
signingCredentials: creds
);
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token)
});
}
return Unauthorized();
}
}
এখানে:
প্রতিটি রিকোয়েস্টে, ক্লায়েন্ট JWT টোকেনটি Authorization Header এ পাঠায়।
GET /api/values
Authorization: Bearer <your-token-here>
ASP.Net Core এই টোকেনটি গ্রহণ করে এবং যাচাই করে, এবং যদি টোকেনটি বৈধ হয়, তবে রিকোয়েস্টটি প্রসেস করা হয়।
JWT Authentication আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ এবং স্কেলেবল করে তোলে, কারণ এটি স্টেটলেস এবং সেশনের প্রয়োজন হয় না।
Read more